Я решил проблему доступа к s3, включаю все настройки и методы, которые использовал. Чтобы устранить неполадки, я начал тестирование с фактическим пользователем AWS, а затем вернулся к идентичности когнитивной системы. Я включил примечания относительно доступа пользователя AWS для справки. Я также отказался от кода AWS sample HTML и использовал простую короткую функцию для отображения вывода в консоли, используя функцию getsignedurl. Я не знаком с библиотеками AWS, и обнаружение getsignedurl помогло ускорить тестирование и, наконец, решить проблему.
Повсюду использовались следующие имена примеров: Cognito Role: GET-IMAGE S3 Bucket: IMAGE-BUCKET
Я go через Cognito и AWS пользовательский доступ к S3, используя HTML для простой демонстрации и тестирования.
С Cognito:
НАСТРОЙКИ:
Роль: создание идентификатора Cognito. Для получения инструкций и создания следуйте этому мастеру: https://console.aws.amazon.com/cognito/create/ Обратите внимание на образец кода, который AWS предоставляет после его создания - вам понадобится идентификатор пула.
Разрешения : Добавить уровень ролей И разрешения уровня S3
Уровень роли: IAM> Роли> GET-IMAGE_Unauth_Role
Добавить (JSON) к ролям Auth и UnAuth
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "s3Access",
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::IMAGE-BUCKET/*"
]}
S3: IMAGE-BUCKET> Permissions> Bucket Policy:
(JSON)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicRead",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::547999998899:user/anAWSUser",
"arn:aws:iam::547999998899:role/Cognito_GET-IMAGEIDUnauth_Role",
"arn:aws:iam::547999998899:role/Cognito_GET-IMAGEIDAuth_Role"
]
},
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::IMAGE-BUCKET/*"
]
}
]}
** Примечание. Я также добавил AWSUser для версии учетных данных для использования в следующий раздел «С учетными данными»
CORS:
IMAGE-BUCKET> Permissions> CORS
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
** Примечание. Вы можете ограничить источник в параметре AllowedOrigin.
HTML:
С учетными данными пользователя
Вы также можете использовать учетные данные для аутентификации пользователя для доступа к s3. В javascript выше закомментируйте учетные данные когнитивного доступа и используйте вместо них следующее:
//access key ID, Secret
var cred = new AWS.Credentials('AKXXX283988CCCAA-ACCESS-KEY','kKsCuq7a9WNohmOYY8SApewie77493LgV-SECRET');
AWS.config.credentials=cred;
Чтобы получить ключ доступа и секрет из консоли AWS: IAM> Пользователи> an-AWSUser> Security-Credentials
В разделе «Ключи доступа» , нажмите «Создать ключ доступа»
===================
Обратите внимание, что политика доверия для роли, не прошедшей проверку подлинности, создается автоматически на AWS при создании роли Cognito ID; его не нужно определять вручную, как упоминалось ранее.
Также не требуются права доступа к ресурсам на уровне списков и корзин, как в «IMAGE-BUCKET»; Getobject - это все, что нужно для прямого доступа к файлу. В моем случае я получаю доступ к изображениям по ключу, мне не нужно перечислять содержимое корзины.
Я установил права доступа к сегменту Role и S3; Я не тестировал без разрешений роли, может быть достаточно политики корзины.